// 导入配置文件
import config from "@/config";
// 从配置文件中获取基础URL
export const BASE_URL = config.baseURL;
// 用于存储用户的token信息
let token12 = '';

// 定义一个HTTP请求函数，接受请求参数对象 options
export const http = (options) => {
	// 在发送请求前，显示加载中的提示框
	uni.showLoading({
		title: '加载中'
	});

	// 异步获取本地存储中的用户token信息
	uni.getStorage({
		key: 'token',
		success: function(res) {
			// 将获取到的token赋值给变量 token12，如果没有获取到则设为空字符串
			token12 = res.data || '';
		}
	});

	// 创建请求头部对象，包含 'content-type' 和 'token' 信息
	let header = {
		'content-type': 'application/json',
		'token': token12
	};

	// 发送HTTP请求，并返回一个Promise对象
	return new Promise((resolve, reject) => {
		uni.request({
			// 构建完整的请求URL，基于配置的 BASE_URL 和传入的 options.url
			url: BASE_URL + options.url,
			// 指定请求方法，默认为GET
			method: options.method || 'GET',
			// 设置请求头部信息，包括之前构建的 header 对象
			header: options.header || header,
			// 传递请求参数，默认为空对象
			data: options.data || {},
			// 定义请求成功时的回调函数
			success: (res) => {
				// 如果响应数据中包含 'token illegal'，表示用户登录过期
				if (res.data === 'token illegal') {
					// 显示登录过期提示，然后跳转到登录页
					uni.showToast({
						title: '登录过期，请重新登录',
						icon: 'error',
						success: function() {
							uni.navigateTo({
								url: '/pages/login/login'
							});
						}
					});
				}
				// 如果响应数据中的 code 不等于200，表示请求失败
				if (res.data.code !== 200) {
					// 调用 reject 方法处理请求失败
					reject(res);
					return;
				}
				// 请求成功时，调用 resolve 方法并传递响应数据
				resolve(res);
			},
			// 定义请求失败时的回调函数
			fail: (err) => {
				// 显示请求失败提示
				uni.showToast({
					title: "服务器罢工了",
					image: '/static/image/icon/Disconnected.png',
					duration: 2000
				})
				// 调用 reject 方法处理请求失败
				reject(err);
			},
			// 不论请求成功或失败，最终都隐藏加载中的提示框
			complete() {
				uni.hideLoading();
			}
		});
	});
};
